#导包
import unittest  #此处导unittest对测试用例进行管理
from api.login import LoginAPI  #从接口封装文件中


#创建测试类
class TestLogin(unittest.TestCase):
    #前置处理:一般是创建对象（实例化）
    def setUp(self):
        #方法级的处理，另还有类级的前后置处理
        self.login_api = LoginAPI()    #实例化导入的接口类方法


        # #后置处理   # 由于没有要关闭的对象和方法，所以后置处理可以不要
        # def tearDown(self):
        #     pass
        #
        # ctrl+?  可以多选行一起注释掉

    # 定义测试用例

    # case001 登陆成功
    def test01_case(self):
        # 调用登录接口进行登录
        response = self.login_api.login({"mobile":"13800000002","password":"123456"})
        print(response.json())
            # 什么时候这里加括号，什么时候不加

            #断言
        self.assertEqual(200,response.status_code)
        self.assertEqual(True, response.json().get("success"))
        self.assertEqual(10000, response.json().get("code"))
        self.assertIn("操作成功", response.json().get("message"))

    # case002 不输入手机号
    def test02_case(self):

        response = self.login_api.login({"mobile":"","password":"123456"})
        print(response.json())


            #断言
        self.assertEqual(200,response.status_code)
        self.assertEqual(False, response.json().get("success"))
        self.assertEqual(20001, response.json().get("code"))
        self.assertIn("用户名或密码错误", response.json().get("message"))

        #  003 不输入密码
    def test03_case(self):
        # 调用登录接口进行登录
        response = self.login_api.login({"mobile":"13800000002","password":""})
        print(response.json())

        #断言
        self.assertEqual(200,response.status_code)
        self.assertEqual(False, response.json().get("success"))
        self.assertEqual(20001, response.json().get("code"))
        self.assertIn("用户名或密码错误", response.json().get("message"))

    #  004 手机长度小于11位
    def test04_case(self):
        # 调用登录接口进行登录
        response = self.login_api.login({"mobile": "1380000000", "password": "123456"})
        print(response.json())
        # 什么时候这里加括号，什么时候不加

        # 断言
        self.assertEqual(200, response.status_code)
        self.assertEqual(False, response.json().get("success"))
        self.assertEqual(20001, response.json().get("code"))
        self.assertIn("用户名或密码错误", response.json().get("message"))

    #  005 手机长度大于11位
    def test05_case(self):
        # 调用登录接口进行登录
        response = self.login_api.login({"mobile": "138000000021", "password": "123456"})
        print(response.json())


        # 断言
        self.assertEqual(200, response.status_code)
        self.assertEqual(False, response.json().get("success"))
        self.assertEqual(20001, response.json().get("code"))
        self.assertIn("用户名或密码错误", response.json().get("message"))

    #  006 手机号输入非数字
    def test06_case(self):
        # 调用登录接口进行登录
        response = self.login_api.login({"mobile": "error", "password": "123456"})
        print(response.json())

        # 断言
        self.assertEqual(200, response.status_code)
        self.assertEqual(False, response.json().get("success"))
        self.assertEqual(20001, response.json().get("code"))
        self.assertIn("用户名或密码错误", response.json().get("message"))

    # 007 输入未注册手机号
    def test07_case(self):
        # 调用登录接口进行登录
        response = self.login_api.login({"mobile": "13812321236", "password": "123456"})
        print(response.json())

        # 断言
        self.assertEqual(200, response.status_code)
        self.assertEqual(False, response.json().get("success"))
        self.assertEqual(20001, response.json().get("code"))
        self.assertIn("用户名或密码错误", response.json().get("message"))

    # 008 多参
    def test08_case(self):
        # 调用登录接口进行登录
        response = self.login_api.login({"mobile": "13800000002", "password": "123456","sex":"woman"})
        print(response.json())

        # 断言
        self.assertEqual(200, response.status_code)
        self.assertEqual(True, response.json().get("success"))
        self.assertEqual(10000, response.json().get("code"))
        self.assertIn("操作成功", response.json().get("message"))

    # 009 少参-缺少手机号
    def test09_case(self):
        # 调用登录接口进行登录
        response = self.login_api.login({ "password": "123456"})
        print(response.json())

        # 断言
        self.assertEqual(200, response.status_code)
        self.assertEqual(False, response.json().get("success"))
        self.assertEqual(20001, response.json().get("code"))
        self.assertIn("用户名或密码错误", response.json().get("message"))

    # 010 少参-缺少密码
    def test10_case(self):
        # 调用登录接口进行登录
        response = self.login_api.login({"mobile": "13800000002"})
        print(response.json())

        # 断言
        self.assertEqual(200, response.status_code)
        self.assertEqual(False, response.json().get("success"))
        self.assertEqual(20001, response.json().get("code"))
        self.assertIn("用户名或密码错误", response.json().get("message"))

    # 011 无参
    def test11_case(self):
        # 调用登录接口进行登录
        response = self.login_api.login(None)
        print(response.json())

        # 断言
        self.assertEqual(200, response.status_code)
        self.assertEqual(False, response.json().get("success"))
        self.assertEqual(99999, response.json().get("code"))
        self.assertIn("抱歉，系统繁忙", response.json().get("message"))

    # 012 错误参数-手机号
    def test12_case(self):
        # 调用登录接口进行登录
        response = self.login_api.login({"mobil": "13800000002", "password": "123456"})
        print(response.json())

        # 断言
        self.assertEqual(200, response.status_code)
        self.assertEqual(False, response.json().get("success"))
        self.assertEqual(20001, response.json().get("code"))
        self.assertIn("用户名或密码错误", response.json().get("message"))

    # 013 错误参数-密码
    def test13_case(self):
        # 调用登录接口进行登录
        response = self.login_api.login({"mobile": "13800000002", "passwo": "123456"})
        print(response.json())

        # 断言
        self.assertEqual(200, response.status_code)
        self.assertEqual(False, response.json().get("success"))
        self.assertEqual(20001, response.json().get("code"))
        self.assertIn("用户名或密码错误", response.json().get("message"))


    # 获取token
        app.TOKEN = "Bearer " + response.json().get("data")
        print("app.TOKEN")
        app.hearders_data["Authorization"] = app.TOKEN
